package com.gph.saviorframework.security.service;

import com.gph.saviorframework.common.model.User;
import com.gph.saviorframework.base.service.BaseService;

import java.util.List;
import java.util.Map;

public interface UserService extends BaseService<User,String>{

    /**
     * 重置位初始密码
     * @param username
     */
    void resetPassword(String username);

    /**
     * 用户修改密码
     * @param username
     * @param newPwd
     */
    void resetPassword(String username,String newPwd);

    /**
     * 根据组织编号等条件查询用户信息
     * @param org
     * @param sort
     * @param dir
     * @param params
     * @return
     */
    List<Map<String, Object>> find(String org, String sort, String dir, Map<String, Object> params);

    /**
     * 模糊查找用户信息
     * @param start
     * @param limit
     * @param sort
     * @param dir
     * @param params
     * @param extras
     * @return
     */
    Map<String, Object> findFuzzy(int start, int limit, String sort, String dir, Map<String, Object> params,Object... extras);

    /**
     * 根据组织编号获取用户列表
     * @param orgId
     * @return
     */
    List<User> findByOrgId(String orgId);

    /**
     * 根据组织编号获取用户编号集合
     * @param orgId
     * @return
     */
    List<String> getUserIdsByOrgId(String orgId);

    /**
     * 获取所有的用户编号集合
     * @return
     */
    List<String> getIds();

    /**
     * 查询记录数
     * @param org
     * @param params
     * @return
     */
    long count(String org, Map<String, Object> params);

    /**
     * 清除关联的角色
     * @param username
     */
    void clearRole(String username);

    /**
     * 保存用户和角色之间的关系
     * @param roleIds
     * @param username
     */
    void saveUserRole(String[] roleIds, String username);

    /**
     * 通过org和role查询
     * @param org
     * @param role
     * @return
     */
    List<Map<String, Object>> findByOrgAndRole(String org, String role);
    
    /**
     * 根据角色列表获取用户信息
     * @param roleIds
     * @return
     */
    List<Map<String, Object>> findByRoles(List<String> roleIds);
    
    Map<String, Object> findByRoles(int start,int limit,List<String> roleIds);

    /**
     * 是否存在用户
     * @param userName
     * @return
     */
    boolean existUser(String userName);

    /**
     * 判断是否存在email
     * @param email
     * @return
     */
    boolean existEmail(String email);

    /**
     * 分配分管人员
     * @param userId
     * @param userIds
     */
    void assignUsers(String userId,String[] userIds);

    /**
     * 分配分管部门
     * @param userId
     * @param orgIds
     */
    void assigenOrgs(String userId,String[] orgIds);

    /**
     * 批量保存
     * @param users
     */
    void batchSave(List<User> users);

    /***和数据权限相关的****/

    List<Map<String, Object>> findByPermission(List<String> userIds,Map<String, Object> params);

    Map<String, Object> findByPermission1(int start,int limit,List<String> userIds,Map<String, Object> params);

    Map<String, String> getIdNames();

    /**
     * 根据身份证登陆
     * @param certificateNum
     * @return
     */
    User findByCertificateNum(String certificateNum);
}
